# 一般的递归
def recursive(n):
    if n == 1:
        return 1
    return n + recursive(n - 1)


print(recursive(100))
# 尾递归 在函数返回的时候，调用自身本身，并且return语句不能包含表达式。这样，编译器或者解释器就可以把尾递归做优化，
# 使递归本身无论调用多少次，都只占用一个栈帧，不会出现栈溢出的情况。


def w_recursive(n):
    return w_recursive_iter(n, 1)


def w_recursive_iter(num, product):
    if num == 1:
        return product
    return w_recursive_iter(num - 1, num * product)


print(w_recursive(5))
